//对axios函数库进行二次封装
//导入axios
// @ts-ignore
import $router from "@/router/index";
import axios from "axios";
// @ts-ignore
import { ElMessage } from "element-plus";

//利用axios.create方法创建一个axios实例：
const request = axios.create({
    baseURL: '/api',//设置基础路径
    timeout: 7000,//设置超时时间：（如果请求超过5秒，响应失败）
})

//设置请求拦截器
request.interceptors.request.use((config)=>{//配置对象（比如其中属性：header）：如果不传入配置对象，则发不到请求
    //可以通过请求头携带公共参数token
    let token = localStorage.getItem('token');
    config.headers.Authorization = token;
    return config;//返回配置对象
})

//设置响应拦截器
request.interceptors.response.use(
    (response)=>{
        //响应成功
        return response.data;
    },
    (error)=>{
        //响应失败
        //处理http网络错误
        let status = error?.response?.status;
        //判断错误类型
        switch(status){
            case 404:
                ElMessage({
                    type: 'error',
                    message: "路径有问题"
                });
                $router.push({
                    name : '404',
                })
                break;
            case 401:
                ElMessage({
                    type: 'error',
                    message: "用户未授权"
                });
                $router.push('/login')
                break;
            default: 
                ElMessage({
                    type: 'error',
                    message: "未知错误，请联系管理员！"
                })
                break;
        }
        return Promise.reject(new Error(error.message));
    }
)
//对外暴露
export default request;